package com.litxuf.util.mail;

import java.util.HashMap;
import java.util.Map;

import javax.mail.internet.MimeMessage;

import org.apache.log4j.Logger;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;
import org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer;

import freemarker.template.Template;

public class JavaMailSend {
	Logger log = Logger.getLogger(this.getClass().getName());
	private JavaMailSender sender;
	private String mailFrom;
	private FreeMarkerConfigurer freeMarkerConfigurer = null;// FreeMarker的技术类

	public void setFreeMarkerConfigurer(
			FreeMarkerConfigurer freeMarkerConfigurer) {
		this.freeMarkerConfigurer = freeMarkerConfigurer;
	}

	public void setSender(JavaMailSender sender) {
		this.sender = sender;
	}

	// 通过模板构造邮件内容，参数username将替换模板文件中的${username}标签。
	private String getMailText(String username,String pwd) {
		String htmlText = "";
		try {
			// 通过指定模板名获取FreeMarker模板实例
			Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(
					"reg_successmail.ftl");
			// FreeMarker通过Map传递动态数据
			Map map = new HashMap();
			map.put("username", username); // 注意动态数据的key和模板标签中指定的属性相匹配
			map.put("pwds", pwd); // 注意动态数据的key和模板标签中指定的属性相匹配
			// 解析模板并替换动态数据，最终username将替换模板文件中的${username}标签。
			htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl,
					map);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return htmlText;
	}

	// 发送注册邮件
	
	public void sendTemplateMail(String username,String pwd,String mailto) throws Exception {
		MimeMessage  msg = sender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(msg, false, "gb2312");// 由于是html邮件，不是mulitpart类型
		helper.setFrom(mailFrom);
		helper.setTo(mailto);
		helper.setSubject("注册成功");
		String htmlText = getMailText(username,pwd);// 使用模板生成html邮件内容
		helper.setText(htmlText, true);
		log.info("-->成功发送注册成功模板邮件");

		sender.send(msg);
	}
	
	//findpwd_successmail.ftl
	public void sendfindPWDMail(String username,String pwd,String mailto) throws Exception {
		MimeMessage  msg = sender.createMimeMessage();
		MimeMessageHelper helper = new MimeMessageHelper(msg, false, "gb2312");// 由于是html邮件，不是mulitpart类型
		helper.setFrom(mailFrom);
		helper.setTo(mailto);
		helper.setSubject("找回密码");
		String htmlText = getMailText2pwd(username,pwd);// 使用模板生成html邮件内容
		helper.setText(htmlText, true);
		sender.send(msg);

		log.info("-->成功发送修改密码模板邮件");
	}

	
//	 通过模板构造邮件内容，参数username将替换模板文件中的${username}标签。
	private String getMailText2pwd(String username,String pwd) {
		String htmlText = "";
		try {
			// 通过指定模板名获取FreeMarker模板实例
			Template tpl = freeMarkerConfigurer.getConfiguration().getTemplate(
					"findpwd_successmail.ftl");
			// FreeMarker通过Map传递动态数据
			Map map = new HashMap();
			map.put("username", username); // 注意动态数据的key和模板标签中指定的属性相匹配
			map.put("pwds", pwd); // 注意动态数据的key和模板标签中指定的属性相匹配
			// 解析模板并替换动态数据，最终username将替换模板文件中的${username}标签。
			htmlText = FreeMarkerTemplateUtils.processTemplateIntoString(tpl,
					map);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return htmlText;
	}

	public static void main(String[] args) throws  Exception {
		// TODO Auto-generated method stub
		ApplicationContext ctx = new FileSystemXmlApplicationContext(
				"src/applicationContext.xml");
		JavaMailSend ms = (JavaMailSend) ctx.getBean("templateEmail");

		// 发送模板邮件
 		ms.sendTemplateMail("qqq","122ww","litxuf@163.com");
 		System.out.println(" over ");
	}// end method

	public String getMailFrom() {
		return mailFrom;
	}

	public void setMailFrom(String mailFrom) {
		this.mailFrom = mailFrom;
	}
}
